package br.com.vti.sisp_sicrim.antigo.model;

import java.io.Serializable;
import java.sql.ResultSet;
import java.sql.SQLException;

import br.com.vti.sisp_sicrim.antigo.dao.SicSenhaDAO;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;

@SuppressWarnings("serial")
public class SicSenha implements Serializable {

	private String id = "";
	private Integer matricula = 0;
	private String nome = "";
	private String senha = "";
	private Integer nivel = 0;
	private Integer matAtualizador = 0;
	private Integer dataProc = 0;
	private Integer horaProc = 0;
	private ResultSet consulta = null;
	private SicSenhaDAO sicSenhaDAO = new SicSenhaDAO();

	public SicSenha() {
		super();
	}

	public SicSenha(String id, Integer matricula, String nome, String senha, Integer nivel, Integer matAtualizador, Integer dataProc, Integer horaProc) {
		super();
		this.id = id;
		this.matricula = matricula;
		this.nome = nome;
		this.senha = senha;
		this.nivel = nivel;
		this.matAtualizador = matAtualizador;
		this.dataProc = dataProc;
		this.horaProc = horaProc;
	}

	public void grava() {

		try {
			this.id = sicSenhaDAO.insert(matricula, nome, senha, nivel, matAtualizador, dataProc, horaProc);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
	}

	public void atualiza() {

		try {
			sicSenhaDAO.update(this.id, matricula, nome, senha, nivel, matAtualizador, dataProc, horaProc);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
	}

	public boolean pesquisaMatricula(Integer pMatricula) {

		try {
			if (consulta == null) {
				consulta = sicSenhaDAO.findMatricula(pMatricula);
			} else {
				consulta = sicSenhaDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean pesquisaMatriculaMaiorigClas(Integer pMatricula) {

		try {
			if (consulta == null) {
				consulta = sicSenhaDAO.findMatriculageasc(pMatricula);
			} else {
				consulta = sicSenhaDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean pesquisaMatriculaMaior(Integer pMatricula) {

		try {
			if (consulta == null) {
				consulta = sicSenhaDAO.findMatriculagt(pMatricula);
			} else {
				consulta = sicSenhaDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean pesquisaNomeMaiorigClas(String pNome) {

		try {
			if (consulta == null) {
				consulta = sicSenhaDAO.findNomegeasc(pNome);
			} else {
				consulta = sicSenhaDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean leituraNome() {

		try {
			if (consulta == null) {
				consulta = sicSenhaDAO.readNome();
			} else {
				consulta = sicSenhaDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean consultaMatricula(Integer pMatricula) {

		try {
			if (consulta == null) {
				consulta = sicSenhaDAO.selectMatricula(pMatricula);
			} else {
				consulta = sicSenhaDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean consultaMatriculaNome(Integer pMatricula, String pNome) {

		try {
			if (consulta == null) {
				consulta = sicSenhaDAO.selectMatriculaNome(pMatricula, pNome);
			} else {
				consulta = sicSenhaDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean fimDados() {
		return !(sicSenhaDAO.temProximo());
	}

	public void salvarQuebras() {

	}

	public void formataAtributos(ResultSet lista) {

		if (lista == null)
			return;
		try {
			this.id = lista.getString("id");
			this.matricula = lista.getInt("matricula");
			this.nome = lista.getString("nome");
			this.senha = lista.getString("senha");
			this.nivel = lista.getInt("nivel");
			this.matAtualizador = lista.getInt("matAtualizador");
			this.dataProc = lista.getInt("dataProc");
			this.horaProc = lista.getInt("horaProc");
		} catch (SQLException e) {
		}
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public Integer getMatricula() {
		return matricula;
	}

	public void setMatricula(Integer matricula) {
		this.matricula = matricula;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public Integer getNivel() {
		return nivel;
	}

	public void setNivel(Integer nivel) {
		this.nivel = nivel;
	}

	public Integer getMatAtualizador() {
		return matAtualizador;
	}

	public void setMatAtualizador(Integer matAtualizador) {
		this.matAtualizador = matAtualizador;
	}

	public Integer getDataProc() {
		return dataProc;
	}

	public void setDataProc(Integer dataProc) {
		this.dataProc = dataProc;
	}

	public Integer getHoraProc() {
		return horaProc;
	}

	public void setHoraProc(Integer horaProc) {
		this.horaProc = horaProc;
	}

	public void fecha() {
		sicSenhaDAO.fecha();
		consulta = null;
	}

	public long registrosProcessados() {
		return sicSenhaDAO.nroRegistro;
	}

	public long totalRegistros() {
		return sicSenhaDAO.qtdRegistros;
	}

}
